<%-- 
    Document   : downloadFile
    Created on : 07-dic-2013, 19:24:38
    Author     : Juan
--%>

<%@page import="graphs.GraphADT"%>
<%@page import="archivos.BorrarDirectorio"%>
<%@page import="archivos.Sif"%>
<%@page import="kegg.Pathway"%>
<%@page import="archivos.UbicacionArchivos"%>
<%@page import="utils.OS"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.util.*,java.io.*"%>
<!DOCTYPE html>
<!--Assumes that file name is in the request objects query Parameter -->
<%
    //Nombre del fichero a descargar
    String fic = request.getParameter("tituloPDownload");
    String opcionEleg = (String) session.getAttribute("opcionElegida");//Opcion elegida
    String userGO = "";
    if (session.getAttribute("userGO") != null) {
        userGO = (String) session.getAttribute("userGO");//Opcion elegida
        session.removeAttribute("userGO");
    }


    /*Se obtiene el fichero de entrada del usuario (ubicado dentro de la carpeta sif del organismo)*/
    String sesion = session.getId();

    String separator = OS.getDirectorySeparator();
    String ubicacionWebInf = application.getRealPath(separator + "WEB-INF" + separator + "datos");//Ruta raiz
    String ubicacion = ubicacionWebInf + separator + "Comparison" + separator + sesion;//Ruta raiz
    String ubicacionGO = ubicacionWebInf + separator + "go" + separator + sesion;//Ruta raiz
    String ubicacionGoganpa = ubicacionWebInf + separator + "goganpa" + separator + sesion;//Ruta raiz
    File ubicacionSif = new File(ubicacion);
    File ubicacionSifGO = new File(ubicacionGO);
    File ubicacionSifGoganpa = new File(ubicacionGoganpa);

    String ubicacionObli = "";
    if (opcionEleg.equals("go")) {
        if (!ubicacionSifGO.exists()) {
            if (ubicacionSifGO.mkdir()) {

            }
        }
        if (userGO.equals("yes")) {
            GraphADT grafo = (GraphADT) session.getAttribute("grafoUser");
            Sif.crearArchivoSif(grafo, ubicacionGO, fic);
            ubicacionObli = ubicacionGO + separator + fic + ".sif";
        } else {
            //ubicacionObli = ubicacionWebInf + separator + opcionEleg +separator+sesion + separator + fic + ".sif";
            GraphADT grafo = (GraphADT) session.getAttribute("grafoUser2");
            Sif.crearArchivoSif(grafo, ubicacionGO, fic);
            ubicacionObli = ubicacionGO + separator + fic + ".sif";
        }
    } else if (opcionEleg.equals("goganpa")) {
        if (!ubicacionSifGoganpa.exists()) {
            if (ubicacionSifGoganpa.mkdir()) {

            }
        }

        GraphADT grafo = (GraphADT) session.getAttribute("grafoUser");
        Sif.crearArchivoSif(grafo, ubicacionGoganpa, fic);
        ubicacionObli = ubicacionGoganpa + separator + fic + ".sif";

    } else {
        List<Pathway> ps = (List<Pathway>) session.getAttribute("ps");//Nombre del fichero a pintar
        boolean enc = false;
        int i = 0;

        while (!enc) {
            if (ps.get(i).getTitle().equals(fic)) {

                if (!ubicacionSif.exists()) {
                    if (ubicacionSif.mkdir()) {

                    }
                }
                Sif.crearArchivoSif(ps.get(i).getRed(), ubicacion, fic);
                ubicacionObli = ubicacion + separator + fic + ".sif";
                enc = true;
            }
            i++;
        }
    }
    //read the file name.
    File f = new File(ubicacionObli);

    //get the file name
    String name = fic + ".sif";//f.getName().substring(f.getName().lastIndexOf("\\") + 1, f.getName().length());

    //set the content type(can be excel/word/powerpoint etc..)
    response.setContentType("application/octet-stream");//application/pdf

    //set the header and also the Name by which user will be prompted to save
    response.setHeader("Content-Disposition", "attachment; filename=" + name);

    //OPen an input stream to the file and post the file contents thru the 
    //servlet output stream to the client m/c
    InputStream in = new FileInputStream(f);
    ServletOutputStream outs = response.getOutputStream();

    int bit = 256;

    try {
        bit = in.read();
        while ((bit) != -1) {
            outs.write(bit);
            bit = in.read();
        }

    } catch (IOException ioe) {
        ioe.printStackTrace(System.out);
    }

    outs.flush();
    outs.close();
    in.close();

    if (opcionEleg.equals("kegg")) {
        BorrarDirectorio.borrarDirectorio(ubicacionSif);
        ubicacionSif.delete();
    } else if (opcionEleg.equals("go")) {
        BorrarDirectorio.borrarDirectorio(ubicacionSifGO);
        ubicacionSifGO.delete();
    } else {
        BorrarDirectorio.borrarDirectorio(ubicacionSifGoganpa);
        ubicacionSifGoganpa.delete();
    }


%>